package beans;

import java.util.Collection;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;

import modelo.Financiamiento;
import modelo.Proyecto;
import dao.FinanciamientoDao;
import dao.ProyectoDao;
import excepciones.DaoException;

@ManagedBean //(name = "LoginBean")
@RequestScoped
public class EditFinanciamientoBean {

	@ManagedProperty(value="#{listFinanciamientosBean}")
	private ListFinanciamientosBean listFinanciamientosBean;
	
	/*  Variables del proyecto */
	
	private Proyecto proyecto;
	private Long id;
	private String financiamientos;
	private Financiamiento financiamiento;
	private String rubro;
	private String unlp;
	private Integer porcentaje;
	private String contraparte;

	public EditFinanciamientoBean(){
		
	}
	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}
		
	@PostConstruct
	public void init(){
		if (listFinanciamientosBean.getSelected() != null){
			FinanciamientoDao finanDao = new FinanciamientoDao();
			try {
				this.setFinanciamiento((Financiamiento) finanDao.findById(listFinanciamientosBean.getSelected()));
				this.setRubro(this.getFinanciamiento().getRubro());
				this.setUnlp(this.getFinanciamiento().getUnlp());
				this.setPorcentaje(this.getFinanciamiento().getPorcentaje());
				this.setContraparte(this.getFinanciamiento().getContraparte());
				
				finanDao.closeEntityManager();
			} catch (DaoException e) {
				e.printStackTrace();
			}	
		}
	}
	
	public String saveFinanciamiento(){
			
		if (listFinanciamientosBean.getSelected() == null )
		{
			try {
				Financiamiento finan = new Financiamiento();
				finan.setRubro(rubro);
				finan.setUnlp(unlp);
				finan.setPorcentaje(porcentaje);
				finan.setContraparte(contraparte);
				
				FinanciamientoDao finanDao = new FinanciamientoDao(finan);
				finanDao.create();
				finanDao.closeEntityManager();
				setFinanciamiento(finan);
			} catch (DaoException e) {
				
				e.printStackTrace();
			}
		}else{
			try {
				setFinanciamiento(financiamiento);
				financiamiento.setRubro(rubro);
				financiamiento.setUnlp(unlp);
				financiamiento.setPorcentaje(porcentaje);
				financiamiento.setContraparte(contraparte);
				
				FinanciamientoDao financiamientoDao = new FinanciamientoDao(financiamiento);
				financiamientoDao.update();
				financiamientoDao.closeEntityManager();
			} catch (DaoException e) {
				
				e.printStackTrace();
			}
		}
				
		Proyecto proye = listFinanciamientosBean.getProyecto();
		Collection<Financiamiento> misFina = proye.getMis_financiamientos();
		Financiamiento existe = proye.exiteFinanciamiento(financiamiento);
		if (existe == null){
			misFina.add(financiamiento);
		}else{
			existe.setContraparte(financiamiento.getContraparte());
			existe.setPorcentaje(financiamiento.getPorcentaje());
			existe.setRubro(financiamiento.getRubro());
			existe.setUnlp(financiamiento.getUnlp());
			FinanciamientoDao finanDao = new FinanciamientoDao(existe);
			try {
				finanDao.update();
			} catch (DaoException e) {
				e.printStackTrace();
			}
			finanDao.closeEntityManager();
		}
		
		proye.setMis_financiamientos(misFina);
		// listFinanciamientosBean.setProyecto();
		ProyectoDao proyectoDao = new ProyectoDao(proye);
		try {
			proyectoDao.update();
		} catch (DaoException e) {
			e.printStackTrace();
		}
		proyectoDao.closeEntityManager();
		
		return "irListFinanciamiento";
	}
	
	public String volverAlProyecto(){
		return "irEditarProyectos";
	}
	
	public Proyecto getProyecto() {
		return proyecto;
	}

	public void setProyecto(Proyecto proyecto) {
		this.proyecto = proyecto;
	}

	public String getFinanciamientos() {
		return financiamientos;
	}

	public void setFinanciamientos(String financiamientos) {
		this.financiamientos = financiamientos;
	}
	
	public Financiamiento getFinanciamiento() {
		return financiamiento;
	}
	public void setFinanciamiento(Financiamiento financiamiento) {
		this.financiamiento = financiamiento;
	}
	public String getRubro() {
		return rubro;
	}
	public void setRubro(String rubro) {
		this.rubro = rubro;
	}
	public String getUnlp() {
		return unlp;
	}
	public void setUnlp(String unlp) {
		this.unlp = unlp;
	}
	public Integer getPorcentaje() {
		return porcentaje;
	}
	public void setPorcentaje(Integer porcentaje) {
		this.porcentaje = porcentaje;
	}
	public String getContraparte() {
		return contraparte;
	}
	public void setContraparte(String contraparte) {
		this.contraparte = contraparte;
	}
	public ListFinanciamientosBean getListFinanciamientosBean() {
		return listFinanciamientosBean;
	}
	public void setListFinanciamientosBean(
			ListFinanciamientosBean listFinanciamientosBean) {
		this.listFinanciamientosBean = listFinanciamientosBean;
	}
	
	
}